#include "product_manage.h" //

#define GOODS_BACKUP_NUM 3 // 备份数量
#define GOODS_BACKUP_FNAME "./file_data/packup_proudct_inf"

// 文件备份
void product_Update_data(vector v) // 没做文件打开失败检测
{
    char backup[3][100] = {""};
    int i = 0;

    FILE *new_file;
    // 备份逻辑用backup_dataT*备份文件，
    for (i = 0; i < GOODS_BACKUP_NUM; i++)
    {
        sprintf(backup[i], "%sT%d.bin", GOODS_BACKUP_FNAME, i); // 将文件名输入进 backup数组

        // printf("%s\n", backup[i]);

        new_file = fopen(backup[i], "a+"); // 没备份文件创建备份文件，有则打开不影响
        fclose(new_file);
    }

    remove(backup[2]); // 删除最后一个备份文件

    for (i = GOODS_BACKUP_NUM - 1; i > 0; i--)
    {
        rename(backup[i - 1], backup[i]);
    }

    new_file = fopen(backup[0], "w"); // 先备份
    fwrite(v->buff, sizeof( elem_type) * v->size, 1, new_file);
    fclose(new_file);

    new_file = fopen(PRODUCT_DATA_FILE, "w"); // 再写入数据文件
    fwrite(v->buff, sizeof( elem_type) * v->size, 1, new_file);
    fclose(new_file);

    // rename(backup[0], "main_file.bin");
}

void product_Vector_Del(vector v)
{
    int i = 0, j = 0;
    char YN_Del, c;
    char temp_ID[30] = "";
    union elem_vector **temp = NULL; // 二重指针存储是否需要修改的文件，批量删除的雏形。

    printf("\n---------删除-----------\n");

    while (1)
    {
        temp = realloc(temp, sizeof(union elem_vector *) * (j + 1));
        printf("请输入货物%s", product_gfind_v[0]);
        printf("\n:>");
        scanf("%s", temp_ID);

        YN_Del = getchar();
        while ('\n' != YN_Del && '\n' != (c = getchar())) // 一个回车也会进入下一循环
            ;

        if (NULL != (temp[j] = product_find_data(v, temp_ID, product_func_array[0], 0)))
        {
            printf("该货物信息为:\n");
            product_show_inf(temp[j]);
            printf("\n是否删除？(Y/N)");

            YN_Del = getchar();
            while ('\n' != YN_Del && '\n' != (c = getchar())) // 一个回车也会进入下一循环
                ;

            if (YN_Del == 'Y' || YN_Del == 'y') // 确定删除则保存该地址,否则清除该用户地址
            {
                j++;
            }
            else
            {
                temp[j] = NULL;
            }
        }
        else
        {
            printf("no find\n");
        }

        printf("\n是否继续？(Y/N)");

        YN_Del = getchar();
        while ('\n' != YN_Del && '\n' != (c = getchar())) // 一个回车也会进入下一循环
            ;

        if (YN_Del == 'N' || YN_Del == 'n')
            break;
    }

    printf("是否保存操作？(Y/N)");

    YN_Del = getchar();
    while ('\n' != YN_Del && '\n' != (c = getchar())) // 一个回车也会进入下一循环
        ;

    if (YN_Del == 'Y' || YN_Del == 'y')
    {
        while (j > 0) // 连续删除
        {
            memset(temp[--j], '\0', sizeof(elem_type));
        }
        printf("更新数据中\n");
        product_Update_data(v); // 保存并备份
                                // sleep(1);
        printf("更新成功\n");
    }
    else
    {
        printf("未能保存\n");
        // sleep(1);
    }

    //
    // printf("更新备份数据");

    return;
}

// // 文件备份
// void goods_Update_data(vector v) // 没做文件打开失败检测
// {
//     int i = 0;
//     char *backup[3] = {NULL};

//     char temp[30];
//     FILE *new_file;

//     // 备份逻辑用backup_dataT*备份文件，
//     for (i = 0; i < 3; i++)
//     {
//         backup[i] = realloc(backup[i], 30 * (i + 1) * sizeof(char));
//         sprintf(backup[i], "%sT%d.bin", GOODS_BACKUP_FNAME, i); // 将文件名输入进 backup数组

//         new_file = fopen(backup[i], "a"); // 没备份文件创建备份文件，有则打开不影响
//         fclose(new_file);
//     }

//     remove(backup[2]); // 删除最后一个备份文件
//     for (i = 3 - 1; i > 0; i--)
//     {
//         rename(backup[i - 1], backup[i]);
//     }

//     new_file = fopen(backup[0], "w"); // 先备份
//     fwrite(v->buff, sizeof(elem_type) * v->size, 1, new_file);
//     fclose(new_file);

//     new_file = fopen(PRODUCT_DATA_FILE, "w"); // 再写入数据文件
//     fwrite(v->buff, sizeof(elem_type) * v->size, 1, new_file);
//     fclose(new_file);

//     // rename(backup[0], "main_file.bin");
// }

// void Vector_Del(vector v)
// {
//     int i = 0, j = 0;
//     char YN_Del, c;
//     char temp_ID[30] = "";
//     elem_type **temp = NULL; // 二重指针存储是否需要修改的文件，批量删除的雏形。

//     printf("\n---------删除-----------\n");
//     while (1)
//     {
//         temp = realloc(temp, sizeof(elem_type *) * (j + 1));
//         printf("请输入货物ID");
//         printf("\n:>");
//         scanf("%s", temp_ID);

//         YN_Del = getchar();
//         while ('\n' != YN_Del && '\n' != (c = getchar())) // 一个回车也会进入下一循环
//             ;

//         if (NULL != (temp[j] = find_data(v, temp_ID, func_array[0], 0)))
//         {
//             printf("该商品信息为:\n");
//             show_inf(temp[j]);
//             printf("\n是否删除？(Y/N)");

//             YN_Del = getchar();
//             while ('\n' != YN_Del && '\n' != (c = getchar())) // 一个回车也会进入下一循环
//                 ;

//             if (YN_Del == 'Y' || YN_Del == 'y') // 确定删除则保存该地址否则不管
//             {
//                 j++;
//             }
//             else
//             {
//                 temp[j] = NULL;
//             }
//         }
//         else
//         {
//             printf("no find\n");
//         }

//         printf("\n是否继续？(Y/N)");

//         YN_Del = getchar();
//         while ('\n' != YN_Del && '\n' != (c = getchar())) // 一个回车也会进入下一循环
//             ;

//         if (YN_Del == 'N' || YN_Del == 'n')
//             break;
//     }

//     printf("是否保存操作？(Y/N)");

//     YN_Del = getchar();
//     while ('\n' != YN_Del && '\n' != (c = getchar())) // 一个回车也会进入下一循环
//         ;

//     if (YN_Del == 'Y' || YN_Del == 'y')
//     {
//         j = 0;
//         while (NULL != temp[j]) // 连续删除
//         {
//             memset(temp[j++], '\0', sizeof(elem_type));
//         }
//         printf("更新数据中\n");
//         Update_data(v); // 保存并备份
//                         // sleep(1);
//         printf("更新成功\n");
//     }
//     else
//     {
//         printf("未能保存\n");
//         // sleep(1);
//     }

//     //
//     // printf("更新备份数据");

//     return;
// }
